# -*- coding: UTF-8 -*-
from django.parts.auth.formfields import AuthenticationForm
from django.core import formfields, template_loader
from django.core.extensions import DjangoContext as Context
from django.models.auth import sessions
from django.models.core import sites
from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect

REDIRECT_FIELD_NAME = 'next'

def login(request):
    "Affiche le formulaire de connexion et traite l'action de connexion."
    manipulator = AuthenticationForm(request)
    redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
    if request.POST:
        errors = manipulator.get_validation_errors(request.POST)
        if not errors:
            # Un léger contrôle de sécurité : on s'assure simplement que la valeur de redirect_to n'est pas n'importe quoi.
            if not redirect_to or '://' in redirect_to or ' ' in redirect_to:
                redirect_to = '/accounts/profile/'
            response = HttpResponseRedirect(redirect_to)
            sessions.start_web_session(manipulator.get_user_id(), request, response)
            return response
    else:
        errors = {}
    response = HttpResponse()
    # On définit le cookie suivant pour tester si l'utilisateur accepte les cookies
    response.set_cookie(sessions.TEST_COOKIE_NAME, sessions.TEST_COOKIE_VALUE)
    t = template_loader.get_template('registration/login')
    c = Context(request, {
        'form': formfields.FormWrapper(manipulator, request.POST, errors),
        REDIRECT_FIELD_NAME: redirect_to,
        'site_name': sites.get_current().name,
    })
    response.write(t.render(c))
    return response

def logout(request):
    "Déconnecte l'utilisateur et affiche un message 'Vous êtes déconnecté'."
    if request.session:
        # On redirige l'utilisateur vers la page actuelle jusqu'à ce que la session ait été effacée.
        response = HttpResponseRedirect(request.path)
        # On supprime le cookie en définissant un cookie de valeur vide et d'âge maximum 0
        response.set_cookie(request.session.get_cookie()[0], '', max_age=0)
        request.session.delete()
        return response
    else:
        t = template_loader.get_template('registration/logged_out')
        c = Context(request)
        return HttpResponse(t.render(c))

def logout_then_login(request):
    "Déconnecte l'utilisateur s'il est connecté, puis le redirige vers la page de connexion."
    response = HttpResponseRedirect('/accounts/login/')
    if request.session:
        # On supprime le cookie en définissant un cookie de valeur vide et d'âge maximum 0
        response.set_cookie(request.session.get_cookie()[0], '', max_age=0)
        request.session.delete()
    return response

def redirect_to_login(next):
    "Redirige l'utilisateur vers la page de connexion, en transmettant dans l'URL la page spécifiée via l'argument 'next'"
    return HttpResponseRedirect('/accounts/login/?%s=%s' % (REDIRECT_FIELD_NAME, next))
